package com.maxbill.singleton;


import lombok.extern.log4j.Log4j2;

/*
 * 单例模式-内部类模式
 * 特点：线程安全，调用效率高，可以延时加载
 * 优点：内部类只有在外部类被调用才加载，从而实现了延迟加载，线程安全且不用加锁
 * 当获取实例方法第一次被调用的时候,它第一次读取SingletonHolder.instance，导致SingletonHolder类得到初始化
 * 而这个类在装载并被初始化的时候，会初始化它的静态域，从而创建Singleton的实例，由于是静态的域，因此只会在虚拟机装载类的时候初始化一次，并由虚拟机来保证它的线程安全性
 */
@Log4j2
public class SingletonHolderMode {

    private static class SingletonHolder {
        private static SingletonHolderMode instance = new SingletonHolderMode();
    }

    public static SingletonHolderMode getInstance() {
        return SingletonHolder.instance;
    }

}
